﻿#define _CRT_SECURE_NO_WARNINGS

#define _CRT_SECURE_NO_WARNINGS
//#include<iostream>
//
//using namespace std;
//int main()
//{
//	int age = 0;
//	cout << "多少岁了" << endl;
//	cin >> age;
//	cout <<"今年已经" << age <<"岁" << endl;
//	return 0;
//}
//#include<iostream>
//
//using namespace std;
//int Add(int a = 100, int b = 11)
//{
//	return a + b;
//}
//int main()
//{
//	int a = Add(10,20);//正常函数
//	int b = Add(10);//半缺省参数
//	int c = Add();//完全缺省参数
//	cout << a << "\n" << b << "\n" << c << endl;
//	return 0;
//}

//#include<iostream>
//using namespace std;
//
//int Add(int a, double b)//原函数
//{
//	return a + b;
//}
//
////double Add(int a, double b)
////{
////	return a + b;
////}不符合重构
////重构
//double Add(double a, int b)//形参顺序不同
//{
//	return a + b;
//}
//double Add(double a, double b)//形参类型不同
//{
//	return a + b;
//}
//int Add(int a)//形参参数个数不同
//{
//	return a + 0;
//}
//int main()
//{
//	cout << Add(1, 2.0) << "\n" << Add(2, 5.5) << "\n" << Add(2.2, 3.3) << "\n" << Add(1) << endl;
//	return 0;
//}

//#include<iostream>
//using namespace std;
//
//int Add(int a, double b)//原函数
//{
//	return a + b;
//}
//double Add(int a = 10, int b = 10)
//{
//	return a + b;
//}
//int main()
//{
//	cout << Add(100,200) << endl;
//	return 0;
//}

//void Func(int a = 10,int b =20)
//{
//	//功能...
//}
////void Func(double a =10)
////{
////	//功能...
////}
//int main()
//{
//	Func();
//	return 0;
//}


//#include<iostream>
//
//int main()
//{
//	int a = 10;
//	int& b = a;
//	int& c = b;
//	int& d = c;
//	std::cout << a << b << c << d << std::endl;//全是10
//	d = 20;
//	std::cout << a << b << c << d << std::endl;//全是20
//
//	return 0;
//}

//#include<iostream>
//
//using namespace std;
//
//void Spaw(int& change1, int& change2)
//{
//	int tmp = change1;
//	change1 = change2;
//	change2 = tmp;
//}
//int main()
//{
//	int a = 100;
//	int b = 200;
//	cout << "交换之前:" << a << " " << b << endl;//100 200
//	Spaw(a, b);
//	cout <<"交换之后:" << a << " " << b << endl;// 200 100
//	return 0;
//}

//// ⼀些主要⽤C代码实现版本数据结构教材中，使⽤C++引⽤替代指针传参，⽬的是简化程序
//void SeqPushBack(SLT& sl, int x)
//{
//
//}
//typedef struct ListNode
//{
//	int val;
//	struct ListNode* next;
//}LTNode, * PNode;
//// 指针变量也可以取别名，这⾥LTNode*& phead就是给指针变量取别名
//// 这样就不需要⽤⼆级指针了，相对⽽⾔简化了程序
////void ListPushBack(LTNode** phead, int x)
////void ListPushBack(LTNode*& phead, int x)
//void ListPushBack(PNode& phead, int x)
//{
//	PNode newnode = (PNode)malloc(sizeof(LTNode));
//	newnode->val = x;
//	newnode->next = NULL;
//	if (phead == NULL)
//	{
//		phead = newnode;
//	}
//	else
//	{
//		//...
//	}
//}
//
//int main()
//{
//	PNode plist = NULL;
//	ListPushBack(plist, 1);
//	return 0;
//}

//#include<iostream>
//#include<assert.h>
//
//typedef struct SeqList
//{
//	int* arr;
//	int capacity;
//	int size;
//}SLT;
//
////初始化
////用引用前
//void SLTInit1(SLT* SL)
//{
//	SL->arr = NULL;
//	SL->capacity = SL->size = 0;
//}
//
////用引用后
//void SLTInit2(SLT& SL)
//{
//	SL.arr = NULL;
//	SL.capacity = SL.size = 0;
//}
//
////用引用前
//int* SLAt1(SLT* SL,int i)
//{
//	assert(SL->size);
//	return &SL->arr[i];
//}
////用引用后
//int& SLAt2(SLT& SL, int i)
//{
//	assert(SL.size);
//	return SL.arr[i];
//}
//int main()
//{
//
//	return 0;
//}

////这样写是不对的，函数执行完了函数栈帧会销毁，内部变量全还给操作系统
////返回值会放入一个临时变量中，而他全名都销毁了，会导致和野指针一样
////对于后面调用的Func2被b覆盖掉
//#include<iostream>
//int& Func1()
//{
//	int a = 10;
//	return a;
//}
//int& Func2()
//{
//	int b = 20000;
//	return b;
//}
//using namespace std;
//int main()
//{
//	int ret1 = Func1();
//	cout << ret1 << endl;
//	int ret2 = Func2();
//	cout << ret2 << endl;
//	cout << ret1 << endl;
//	return 0;
//}


//#include<iostream>
//
//using namespace std;
//int main()
//{
//	//const int a1 = 200;//常变量
//	////int& a2 = a1;//越权（防止使用别名来修改a1）
//	//const int& a2 = a1;//同级
//	//int b1 = 300;
//	//int& b2 = b1;//同级
//	//const int& b3 = b1;//降级(限制权力)
//	
//	const int a1 = 200;//常变量
//	int* a2 = &a1;//越权
//
//	return 0;
//}


//#include<iostream>
//
//using namespace std;
//int main()
//{
//	//int a = 10;
//	//const int& b = a;
//	//cout << b << endl;
//	//a = 20;
//	//cout << b << endl;
//	double a = 2.0;
//	const int& b = a;
//	//const int& b = a;
//	a = 200;
//	cout << b << endl;
//
//	return 0;
//}


//#include<iostream>
//
//using namespace std;
//void F(int x)
//{
//	cout << "int x" << endl;
//}
//void F(int* x)
//{
//	cout << "int* x" << endl;
//}
//int main()
//{
//	F(0);
//	F(NULL);//c++中表示0
//	F(nullptr);
//	return 0;
//}


#include<iostream>

using namespace std;
inline int Add(int a, int b)
{
	return a + b;
}
int main()
{

	return 0;
}